package com.dc.system.mapper;

import com.dc.system.model.*;

import java.util.List;
import java.util.Map;

/**
 * @Description: ApprovalMapper
 * @Author: ChenXueLi
 * @Date: 2018-05-03 10:54
 */
public interface ApprovalMapper {

    /**
     * 添加一个审批模板
     * @param approvalModel
     * @return
     */
    int addApprovalModel(ApprovalModel approvalModel);

    /**
     * 添加一个审批模板的分条件审批
     * @param approvalProviso
     * @return
     */
    int addApprovalProviso(ApprovalProviso approvalProviso);

    /**
     * 添加一个审批流程
     * @param approvalProcess
     * @return
     */
    int addApprovalProcess(ApprovalProcess approvalProcess);

    /**
     * 添加一个审批历史流程
     * @param approvalHistory
     * @return
     */
    int addApprovalHistory(ApprovalHistory approvalHistory);

    /**
     * 根据模板id查询出模板
     * @param id
     * @return
     */
    ApprovalModel getApprovalModelById(Integer id);

    /**
     * 根据模板的分条件id查询分条件
     * @param provisoids
     * @return
     */
    List<ApprovalProviso> getApprovalProvisoById(List<Integer> provisoids);

    /**
     * 根据id查询审批流程
     * @param processId
     * @return
     */
    ApprovalProcess getApprovalProcessById(Integer processId);

    /**
     * 根据流程id查询流程历史
     * @param processId
     * @return
     */
    List<ApprovalHistory> getApprovalHistoryByProcessId(Integer processId);

    /**
     * 根据流程id查询未审核的流程历史
     * @param processId
     * @return
     */
    List<ApprovalHistory> getApprovalHistoryNotExamineByProcessId(Integer processId);

    /**
     * 修改审批流程的状态
     * @param approvalProcess
     * @return
     */
    int updateApprovalProcessState(ApprovalProcess approvalProcess);

    /**
     * 设置流程的审批人
     * @param approvalProcess
     * @return
     */
    int updateApprovalProcess(ApprovalProcess approvalProcess);

    /**
     * 修改历史审批的状态
     * @param approvalHistory
     * @return
     */
    int updateApprovalHistory(ApprovalHistory approvalHistory);

    /**
     * 获取到某一状态的历史进程
     * @param processId
     * @param state
     * @return
     */
    List<ApprovalHistory> getApprovalHistoryByIdByState(Integer processId, Integer state);

}
